const path = require('path')
// 导入插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

const config = {
    // 入口文件
    entry: './src/main.js',
    output: {
        filename: '[name].[hash:8].js',
        path: path.resolve(__dirname, './build')
    },
    module: {
        rules: [
            // 针对CSS代码进行处理
            {
                test: /\.css$/,
                use: [process.env.NODE_ENV === 'production' ? MiniCssExtractPlugin.loader :
                    'vue-style-loader', 'css-loader', 'postcss-loader']
            },
            // 针对vue代码进行处理
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            // 针对ts代码进行处理
            {
                test: /\.ts$/,
                loader: 'ts-loader',
                exclude: /node_modules/,
                options: {appendTsSuffixTo: [/\.vue$/]}
            },
            // 针对js代码进行处理
            {
                test: /\.js$/,
                use: 'babel-loader'
            },
        ]
    },
    resolve: {
        extensions: ['.ts', '.js', '.vue', 'json']
    },
    // 开发服务器配置
    devServer: {
        // URL的目录
        contentBase: path.resolve(__dirname, 'build'),
        // DevServer的 HTTP服务端口
        port: 8080
    },
    plugins: [
        new VueLoaderPlugin(),
        // 实例化 HtmlWebpackPlugin
        new HtmlWebpackPlugin({
            chunks: ['main'],
            // 构建后的文件名
            filename: "index.html",
            // 源文件名
            template: "index.html"
        })
    ]
};

if (process.env.NODE_ENV === 'production') {
    config.plugins.push(new MiniCssExtractPlugin({
        filename: '[name].[hash:8].css'
    }))
}
module.exports = config;
